const { DataTypes } = require('sequelize');
const { sequelize } = require('../library/sequelize.js');

// 定义token模型
const token = sequelize.define('ly_token', {
    // 主键ID
    token_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        primaryKey: true,
        autoIncrement: true,
        comment: ''
    },

    // Token值
    token: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: 'token值'
    },

    // 生成时请求者的IP
    token_ip: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '生成时请求者的IP'
    },

    // 生成时请求者的ID
    user_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '生成时请求者的ID'
    },

    // 有效期
    expire_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '有效期'
    },

    // 是否删除
    is_delete: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否删除'
    },

    // 创建时间
    create_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '创建时间'
    },

    // 更新时间
    update_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '更新时间'
    }
}, {
    tableName: 'ly_token',
    timestamps: false, // 不使用Sequelize的默认时间戳
    indexes: [
        {
            name: '用户ID',
            fields: ['user_id']
        },
        {
            name: '用户IP',
            fields: ['token_ip']
        },
        {
            name: '创建时间',
            fields: ['create_time']
        },
        {
            name: '更新时间',
            fields: ['update_time']
        }
    ],
    comment: '用户通行凭证'
});

// 模型初始化
async function initModel() {
    try {
        await token.sync({ alter: false }); // 不自动修改表结构
        console.log('✅ Token模型初始化成功');
        return true;
    } catch (error) {
        console.error('❌ Token模型初始化失败:', error);
        return false;
    }
}

// 工具方法：获取当前时间戳
function getCurrentTimestamp() {
    return Math.floor(Date.now() / 1000);
}

// 工具方法：创建token时的默认值处理
function getCreateDefaults() {
    const now = getCurrentTimestamp();
    return {
        create_time: now,
        update_time: now,
        is_delete: 0
    };
}

// 工具方法：更新token时的时间戳处理
function getUpdateDefaults() {
    return {
        update_time: getCurrentTimestamp()
    };
}

module.exports = {
    tokenModel: token,
    initModel,
    getCurrentTimestamp,
    getCreateDefaults,
    getUpdateDefaults
};